home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Toolbox / Visual Basic Toolbox (P.I.E.)(1996).ISO / code_lib / objlibr / objlib12 / sample1 / chngicon.frm next >
Text File  |  1995-06-05  |  8KB  |  296 lines

  1. VERSION 2.00
  2. Begin Form ChngIcon 
  3.    BackColor       =   &H00C0C0C0&
  4.    BorderStyle     =   3  'Fixed Double
  5.    Caption         =   "Change Icon"
  6.    ClientHeight    =   1845
  7.    ClientLeft      =   2310
  8.    ClientTop       =   2085
  9.    ClientWidth     =   6750
  10.    ControlBox      =   0   'False
  11.    Height          =   2250
  12.    Left            =   2250
  13.    LinkMode        =   1  'Source
  14.    LinkTopic       =   "Form1"
  15.    MaxButton       =   0   'False
  16.    MinButton       =   0   'False
  17.    ScaleHeight     =   123
  18.    ScaleMode       =   3  'Pixel
  19.    ScaleWidth      =   450
  20.    Top             =   1740
  21.    Width           =   6870
  22.    Begin PictureBox loader 
  23.       AutoRedraw      =   -1  'True
  24.       BorderStyle     =   0  'None
  25.       Height          =   495
  26.       Left            =   270
  27.       ScaleHeight     =   33
  28.       ScaleMode       =   3  'Pixel
  29.       ScaleWidth      =   33
  30.       TabIndex        =   9
  31.       Top             =   1620
  32.       Visible         =   0   'False
  33.       Width           =   495
  34.    End
  35.    Begin HScrollBar hs 
  36.       Height          =   252
  37.       LargeChange     =   288
  38.       Left            =   1680
  39.       SmallChange     =   36
  40.       TabIndex        =   7
  41.       Top             =   1215
  42.       Width           =   3492
  43.    End
  44.    Begin PictureBox Pic1 
  45.       BackColor       =   &H00FFFFFF&
  46.       Height          =   510
  47.       Left            =   1680
  48.       ScaleHeight     =   32
  49.       ScaleMode       =   3  'Pixel
  50.       ScaleWidth      =   230
  51.       TabIndex        =   6
  52.       Top             =   720
  53.       Width           =   3480
  54.       Begin PictureBox icns 
  55.          AutoRedraw      =   -1  'True
  56.          BackColor       =   &H00FFFFFF&
  57.          BorderStyle     =   0  'None
  58.          DrawWidth       =   2
  59.          Height          =   480
  60.          Left            =   0
  61.          ScaleHeight     =   32
  62.          ScaleMode       =   3  'Pixel
  63.          ScaleWidth      =   218
  64.          TabIndex        =   8
  65.          Top             =   0
  66.          Width           =   3264
  67.       End
  68.    End
  69.    Begin TextBox Text1 
  70.       FontBold        =   0   'False
  71.       FontItalic      =   0   'False
  72.       FontName        =   "MS Sans Serif"
  73.       FontSize        =   8.25
  74.       FontStrikethru  =   0   'False
  75.       FontUnderline   =   0   'False
  76.       Height          =   285
  77.       Left            =   1680
  78.       TabIndex        =   1
  79.       Text            =   "Text1"
  80.       Top             =   240
  81.       Width           =   3480
  82.    End
  83.    Begin CommandButton Command1 
  84.       BackColor       =   &H00000000&
  85.       Caption         =   "&Browse..."
  86.       Height          =   372
  87.       Index           =   2
  88.       Left            =   5400
  89.       TabIndex        =   5
  90.       Top             =   1200
  91.       Width           =   1092
  92.    End
  93.    Begin CommandButton Command1 
  94.       BackColor       =   &H00000000&
  95.       Cancel          =   -1  'True
  96.       Caption         =   "Cancel"
  97.       Height          =   372
  98.       Index           =   1
  99.       Left            =   5400
  100.       TabIndex        =   4
  101.       Top             =   720
  102.       Width           =   1092
  103.    End
  104.    Begin CommandButton Command1 
  105.       BackColor       =   &H00000000&
  106.       Caption         =   "OK"
  107.       Default         =   -1  'True
  108.       Height          =   372
  109.       Index           =   0
  110.       Left            =   5400
  111.       TabIndex        =   3
  112.       Top             =   240
  113.       Width           =   1092
  114.    End
  115.    Begin Image deficon 
  116.       Height          =   480
  117.       Left            =   900
  118.       Picture         =   CHNGICON.FRX:0000
  119.       Top             =   1650
  120.       Visible         =   0   'False
  121.       Width           =   480
  122.    End
  123.    Begin Label Label1 
  124.       Alignment       =   1  'Right Justify
  125.       AutoSize        =   -1  'True
  126.       BackColor       =   &H00C0C0C0&
  127.       BackStyle       =   0  'Transparent
  128.       Caption         =   "&Current Icon:"
  129.       Height          =   192
  130.       Index           =   1
  131.       Left            =   360
  132.       TabIndex        =   2
  133.       Top             =   720
  134.       Width           =   1128
  135.    End
  136.    Begin Label Label1 
  137.       Alignment       =   1  'Right Justify
  138.       AutoSize        =   -1  'True
  139.       BackStyle       =   0  'Transparent
  140.       Caption         =   "&Filename:"
  141.       Height          =   192
  142.       Index           =   0
  143.       Left            =   648
  144.       TabIndex        =   0
  145.       Top             =   264
  146.       Width           =   828
  147.    End
  148. End
  149. Option Explicit
  150. DefInt A-Z
  151. Dim dirty%
  152. Dim iconindex%
  153. Dim i%, r%
  154. Dim lastvalidfile$
  155. 'This form is a copy of the PM dialog, but the method
  156. 'of hiliting the selected icon differs:
  157. 'When a file is selected and its icons are
  158. 'extracted, they are blitted to a picturebox
  159. 'as a bitmap. For simplicity, the selected icon
  160. 'is indicated by a black square rather than by
  161. 'changing the background color.
  162.  
  163. Sub command1_click (Index As Integer)
  164. Dim f$
  165. Select Case Index
  166. Case 0'ok
  167.     'pass changes back to itemprops:
  168.     gItem.iconpath = text1
  169.     gItem.iconindex = iconindex
  170.     GetIcon gItem.iconpath, gItem.iconindex
  171.     Hide
  172. Case 1
  173.     Hide
  174. Case 2  'browse
  175.     f = GetFile(4, 4, 1): If f$ = "" Then Exit Sub
  176.     text1 = f$
  177.     LoadPics f$, 0
  178. End Select
  179. End Sub
  180.  
  181. Function ExtractIcons (f As Form, file$)
  182. Dim n%, r%, inst%, i%, h%
  183.  
  184. h% = f.hWnd
  185. inst% = GetWindowWord(h%, GWW_HINSTANCE)
  186.  
  187. 'get total icons in file
  188. n% = ExtractIcon(inst%, file$, -1)
  189. If n < 1 Then
  190.     MsgBox "The file contains no icons.": Exit Function
  191. End If
  192.  
  193. 'copy each to a bitmap
  194. screen.MousePointer = 11
  195. f.icns.Width = n * 36
  196. For i% = 0 To n - 1
  197.     GetIcon file$, i%
  198.     r = BitBlt(f.icns.hDC, i * 36 + 1, 1, 32, 32, loader.hDC, 0, 0, SRCCOPY)
  199. Next
  200. f.icns.Refresh
  201. ExtractIcons = n
  202. screen.MousePointer = 0
  203. End Function
  204.  
  205. Sub Form_Load ()
  206. 'in case icon size changes with screen resolution:
  207. 'note: this hasn't been tested on anything but 1...x7..
  208.     Pic1.Move 112, 48, 6 * 36, 36
  209.     icns.Move 0, 0, Pic1.Width, 34
  210.     hs.Move Pic1.Left, Pic1.Top + Pic1.Height - 1, Pic1.Width
  211.     text1.Width = Pic1.Width
  212. '
  213. text1 = Trim$(gItem.iconpath)
  214. If text1 = "" Then command1_click 2'prompt for file
  215. '
  216. lastvalidfile$ = text1
  217. LoadPics gItem.iconpath, gItem.iconindex
  218. End Sub
  219.  
  220. Sub Form_Paint ()
  221. RaiseForm Me
  222. End Sub
  223.  
  224. Sub GetIcon (file$, ndx%)
  225. Dim h%, r%, inst%
  226. inst% = GetWindowWord(hWnd, GWW_HINSTANCE)
  227. h% = ExtractIcon(inst%, file$, ndx%)
  228. loader.Cls
  229. If h% > 1 Then 'has icons
  230.     r% = DrawIcon(loader.hDC, 0, 0, h%)
  231. Else
  232.     loader = deficon
  233. End If
  234. End Sub
  235.  
  236. Sub hs_Change ()
  237. icns.Left = -hs.Value
  238. End Sub
  239.  
  240. Sub icns_DblClick ()
  241. command1_click 0
  242. End Sub
  243.  
  244. Sub icns_mousedown (Button As Integer, Shift As Integer, X As Single, Y As Single)
  245. 'erase old hilite
  246. icns.Line (iconindex * 36, 0)-(iconindex * 36 + 34, 34), icns.BackColor, B
  247. 'get absolute index
  248. iconindex = X \ 36
  249. 'draw new hilite
  250. icns.Line (iconindex * 36, 0)-(iconindex * 36 + 34, 34), &H0&, B
  251. End Sub
  252.  
  253. Sub LoadPics (f$, ndx%)
  254. Dim total%
  255. '
  256. If f = "" Then Exit Sub
  257. 'check path, then try to load icons
  258. If FileLen(f$) Then
  259.     lastvalidfile$ = f$
  260. Else
  261.     MsgBox "Cannot open file."
  262.     text1 = lastvalidfile$: Exit Sub
  263. End If
  264.  
  265. 'copy file's icons to icns picbox
  266. total% = ExtractIcons(Me, f$)
  267. If total% = 0 Then Exit Sub
  268. '
  269. 'set scroll range
  270. If total% > 8 Then
  271.     hs.Enabled = -1
  272.     hs.Max = (total - 8) * 36
  273. Else
  274.     hs.Enabled = 0
  275. End If
  276. '
  277. 'hilite it
  278. iconindex = 0
  279. icns_mousedown 0, 0, ndx% * 36 + 3, 0
  280. End Sub
  281.  
  282. Sub Text1_Change ()
  283. dirty = -1
  284. End Sub
  285.  
  286. Sub Text1_GotFocus ()
  287. dirty = 0
  288. End Sub
  289.  
  290. Sub Text1_LostFocus ()
  291. If dirty% Then
  292.         LoadPics CStr(text1), 0
  293. End If
  294. End Sub
  295.  
  296.